home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / head_exp / head.asm next >
Assembly Source File  |  1991-10-18  |  12KB  |  838 lines

  1. DEBUG    EQU    0
  2. ;********************************************************
  3. ;
  4. ;    ☆★☆       ヘッド表示プログラム     ☆★☆
  5. ;
  6. ;        by Yasu.Hara.
  7. ;
  8. ;     Ver1.23 (1990/10/09)
  9. ;
  10. ;********************************************************
  11.     ASSUME    CS:CSEG,DS:DSEG,SS:SSEG
  12. ;********************************************************************
  13.     IF    DEBUG
  14.     PUBLIC    OFFSETX,OFFSETY,ZOOM,PADWORK,INPUT_KEY
  15. READPAG    EQU    10
  16. DRIVE    EQU    'H'
  17.     ELSE
  18. READPAG    EQU    100
  19. DRIVE    EQU    'Q'
  20.     ENDIF
  21. READNUM    EQU    READPAG*10
  22. HEADLEN    EQU    512*3*READNUM
  23. PALTLEN    EQU    32*3
  24. IMG_LEN    EQU    128*1024
  25. EGBSIZE    EQU    1536
  26. ;********************************************************************
  27. CSEG    SEGMENT    DWORD PUBLIC USE32 'CODE'
  28.  
  29.     AND    ESP,-4
  30.     MOV    AX,110H
  31.     MOV    FS,AX
  32.  
  33. ;ドライブ R ガ アルカ チェック
  34.     MOV    AX,3D00H
  35.     MOV    EDX,OFFSET RUN386
  36.     INT    21H
  37.     SETNC    BYTE PTR [EXIST_R]
  38.     ;
  39.     MOV    BX,AX
  40.     MOV    AH,3EH
  41.     INT    21H
  42.  
  43. ;CD ドライブ テイシ ジカン ノ セッテイ
  44.     MOV    DL,1
  45.     CALL    CD_TIME
  46.  
  47. ;シリンダ 0 ヘノ シーク
  48. SEEK_0:
  49.     MOV    AX,3C0H
  50.     MOV    CH,0
  51.     INT    93H
  52.     TEST    AH,AH
  53.     JNZ    SEEK_0
  54.  
  55. ;キーボードクリック オン ノ セイギョ
  56.     MOV    AX,501H
  57.     INT    90H
  58.  
  59. ;FM オンゲン ノミノ ショキカ
  60.     MOV    AH,30H
  61.     CALL    SOUND_CALL
  62.  
  63. ;グラフィック ショキカ
  64.     MOV    AH,0
  65.     MOV    ECX,EGBSIZE
  66.     CALL    EGB_CALL
  67.  
  68. ;カソウガメン ノ セッテイ
  69.     MOV    AX,100H
  70.     MOV    DX,10
  71.     CALL    EGB_CALL
  72.     MOV    AX,101H
  73.     MOV    DX,5
  74.     CALL    EGB_CALL
  75.  
  76.     CALL    OFFSET_0
  77.  
  78. ;ビョウガショク ノ セッテイ
  79.     MOV    AX,701H
  80.     MOV    DX,7FFFH
  81.     CALL    EGB_CALL
  82.  
  83. ;スプライト ショキカ
  84.     CALL    INIT_SPRITE
  85.  
  86. ;
  87.     CALL    CLEAR_SCREEN
  88.     JMP    SHORT RETRY
  89.  
  90. ;CD-ROM リードエラー
  91. ERROR_TRAP:
  92.     MOV    ESI,OFFSET ERROR_$
  93.     CALL    PRINT_MSG
  94.     ;
  95.     MOV    AX,900H
  96.     INT    90H
  97.  
  98. ;データリード ノ リトライ
  99. RETRY:
  100.     MOV    ESI,OFFSET WAIT_$
  101.     CALL    PRINT_MSG
  102.  
  103. ;パレット データ ヲ メモリー ヘ ヨミコム
  104.     MOV    AX,3D00H
  105.     MOV    EDX,OFFSET PALTFIL
  106.     INT    21H
  107.     JC    ERROR_TRAP
  108.     ;
  109.     MOV    BX,AX
  110.     MOV    AH,3FH
  111.     MOV    ECX,PALTLEN
  112.     MOV    EDX,OFFSET PALTWRK
  113.     INT    21H
  114.     JC    ERROR_TRAP
  115.     ;
  116.     MOV    AH,3EH
  117.     INT    21H
  118.     JC    ERROR_TRAP
  119.  
  120. ;ヘッド データ ヲ メモリー ヘ ヨミコム
  121.     MOV    AX,3D00H
  122.     MOV    EDX,OFFSET HEADFIL
  123.     INT    21H
  124.     JC    ERROR_TRAP
  125.     MOV    [HANDLE],AX
  126.     ;
  127.     MOV    BX,AX
  128.     MOV    AX,4202H
  129.     XOR    ECX,ECX
  130.     XOR    EDX,EDX
  131.     INT    21H
  132.     JC    ERROR_TRAP
  133.     ;
  134.     MOV    CX,512*3
  135.     DIV    CX
  136.     MOV    [HEADMAX],AX
  137.     MOV    EDI,OFFSET MAX_$
  138.     CALL    CONVERT_D
  139.     ;
  140.     CALL    READ_CD
  141.  
  142. ;ガメン ノ ヒョウジ
  143.     MOV    AX,101H
  144.     MOV    CX,120
  145.     CALL    SPRITE_CALL
  146.  
  147. ;アトリビュート セッテイ
  148.     MOV    BX,3*10
  149.     MOV    CX,1024-120
  150. ATTR_SET:
  151.     MOV    AH,5
  152.     MOV    DX,202H
  153.     LEA    ESI,[ECX+8000H]
  154.     MOV    DI,8100H
  155.     CALL    SPRITE_CALL
  156.     ADD    CX,4
  157.     DEC    BX
  158.     JNZ    SHORT ATTR_SET
  159.  
  160. ;イチ セッテイ
  161.     MOV    CX,1024-120
  162.     XOR    EBP,EBP
  163. XYZSET_X:
  164.     MOV    DI,46
  165.     MOV    BH,5
  166. XYZSET_Y:
  167.     MOV    SI,BP
  168.     MOV    BL,3
  169. XYZSET_Z:
  170.     MOV    AX,400H
  171.     MOV    DX,202H
  172.     CALL    SPRITE_CALL
  173.     ADD    CX,4
  174.     ADD    SI,33
  175.     DEC    BL
  176.     JNZ    SHORT XYZSET_Z
  177.     ADD    DI,36
  178.     DEC    BH
  179.     JNZ    SHORT XYZSET_Y
  180.     TEST    EBP,EBP
  181.     MOV    BP,136
  182.     JZ    SHORT XYZSET_X
  183. ;
  184.     CALL    CLEAR_SCREEN
  185.     MOV    ESI,OFFSET LINE$
  186.     CALL    PRINT_MSG
  187.  
  188. ;
  189. MAIN_LOOP:
  190.     XOR    EDX,EDX
  191.     MOV    AX,[HEADNUM]
  192.     DEC    AX
  193.     MOV    CX,10
  194.     DIV    CX
  195.     IMUL    AX,CX
  196.     MOV    [HEADOFF],AX
  197.     XOR    EDX,EDX
  198.     MOV    CX,READNUM
  199.     DIV    CX
  200.     CMP    [HPAGE],AX
  201.     JZ    SHORT SAME_PAGE
  202.     MOV    [HPAGE],AX
  203.     CALL    READ_CD
  204. SAME_PAGE:
  205.     XOR    EBX,EBX
  206.     MOV    EDI,OFFSET NUMBER$
  207. NUM_LOOP:
  208.     INC    BL
  209.     ADD    EDI,6
  210.     MOV    AX,[HEADOFF]
  211.     ADD    AX,BX
  212.     CMP    AX,[HEADMAX]
  213.     JBE    SHORT NUM_LOOP1
  214.     MOV    EAX,20202020H
  215.     STOSD
  216.     JMP    SHORT NUM_LOOP2
  217. NUM_LOOP1:
  218.     CALL    CONVERT_D
  219. NUM_LOOP2: 
  220.     CMP    BL,10
  221.     JNZ    SHORT NUM_LOOP
  222.     ;
  223.     MOV    ESI,OFFSET NUMBER$
  224.     CALL    PRINT_MSG
  225. ;スプライト ノ テイギ
  226.     MOV    BH,10
  227.     MOV    CX,1024-120
  228.     MOV    BP,[HEADOFF]
  229. DEF_LOOP:
  230.     MOV    ESI,OFFSET CLR_PAT
  231.     XOR    EDI,EDI
  232.     CMP    BP,[HEADMAX]
  233.     JNC    SHORT DEF_CLR
  234.     XOR    EDX,EDX
  235.     MOV    AX,BP
  236.     MOV    SI,READNUM
  237.     DIV    SI
  238.     MOVZX    EAX,DX
  239.     SAL    EAX,9
  240.     LEA    ESI,[EAX+EAX*2+HEADWRK]
  241.     MOV    DI,512
  242. DEF_CLR:
  243.     MOV    BL,3
  244. DEF_DRCTN:
  245.     MOV    AX,200H
  246.     MOV    DX,202H
  247.     CALL    SPRITE_CALL
  248.     ADD    ESI,EDI
  249.     ADD    CX,4
  250.     DEC    BL
  251.     JNZ    SHORT DEF_DRCTN
  252.     INC    BP
  253.     DEC    BH
  254.     JNZ    SHORT DEF_LOOP
  255.  
  256. ;パレットブロック ノ セッテイ
  257. MAIN_LOOP2:
  258.     MOVZX    ESI,BYTE PTR [PALTNUM]
  259.     SAL    SI,5
  260.     ADD    ESI,OFFSET PALTWRK
  261.     MOV    AH,3
  262.     MOV    CX,256
  263.     MOV    DX,1
  264.     CALL    SPRITE_CALL
  265.  
  266. ;
  267. INPUT_KEY:
  268.     MOV    AX,901H
  269.     INT    90H
  270.     MOV    BX,[PALTNUM]
  271.     MOV    CX,[HEADNUM]
  272.     CMP    DL,'0'
  273.     JC    SHORT NOT_NUMBER
  274.     CMP    DL,'9'+1
  275.     JC    NUMBER_KEY
  276. NOT_NUMBER:
  277.     CMP    DL,0DH
  278.     JZ    RETURN_KEY
  279.     SUB    DL,1BH
  280.     JZ    ESCAPE_KEY
  281.     DEC    DL
  282.     JZ    RIGHT_ARROW
  283.     DEC    DL
  284.     JZ    LEFT_ARROW
  285.     DEC    DL
  286.     JZ    UP_ARROW
  287.     DEC    DL
  288.     JZ    DOWN_ARROW
  289.     DEC    DL
  290.     JNZ    SHORT NOT_SPACE_KEY
  291.     CALL    ZOOM_0
  292.     JMP    SHORT INPUT_KEY
  293.     ;
  294. NOT_SPACE_KEY:
  295.     MOV    BL,3FH
  296.     MOV    DH,1
  297. PAD_LOOP:
  298.     MOV    AH,40H
  299.     CALL    SOUND_CALL
  300.     TEST    DL,0FH
  301.     JZ    SHORT PAD_SKIP
  302.     AND    BL,DL
  303. PAD_SKIP:
  304.     DEC    DH
  305.     JZ    SHORT PAD_LOOP
  306.     ;
  307.     MOV    DL,BYTE PTR [PADWORK]
  308.     OR    DL,0FH
  309.     MOV    BYTE PTR [PADWORK],BL
  310.     NOT    BL
  311.     AND    BL,DL
  312.     JZ    INPUT_KEY
  313.     ;
  314.     MOV    AX,[ZOOM]
  315.     TEST    BL,20H
  316.     JZ    SHORT NOT_ZOOM_DOWN
  317.     DEC    AL
  318. NOT_ZOOM_DOWN:
  319.     TEST    BL,10H
  320.     JZ    SHORT NOT_ZOOM_UP
  321.     INC    AL
  322. NOT_ZOOM_UP:
  323.     CMP    AL,15
  324.     JNC    SHORT NOT_ZOOM
  325.     CMP    AX,[ZOOM]
  326.     JZ    SHORT NOT_ZOOM
  327.     MOV    [ZOOM],AX
  328.     CALL    DISP_START
  329.     JMP    INPUT_KEY
  330.     ;
  331. NOT_ZOOM:
  332.     MOV    AX,[OFFSETX]
  333.     TEST    BL,8
  334.     JZ    SHORT NOT_RIGHT
  335.     INC    AX
  336. NOT_RIGHT:
  337.     TEST    BL,4
  338.     JZ    SHORT NOT_LEFT
  339.     DEC    AX
  340. NOT_LEFT:
  341.     CMP    AX,200
  342.     JZ    SHORT NOT_RL
  343.     CMP    AX,-40
  344.     JZ    SHORT NOT_RL
  345.     MOV    [OFFSETX],AX
  346. NOT_RL:
  347.     ;
  348.     MOV    AX,[OFFSETY]
  349.     TEST    BL,2
  350.     JZ    SHORT NOT_UP
  351.     INC    AX
  352. NOT_UP:
  353.     TEST    BL,1
  354.     JZ    SHORT NOT_DOWN
  355.     DEC    AX
  356. NOT_DOWN:
  357.     CMP    AX,208
  358.     JNC    SHORT NOT_UD
  359.     MOV    [OFFSETY],AX
  360. NOT_UD:
  361.     ;
  362.     CALL    OFFSET_CHG
  363.     JMP    INPUT_KEY
  364.  
  365. RETURN_KEY:
  366.     MOV    BL,2
  367. UP_ARROW:
  368.     SUB    BL,2
  369. DOWN_ARROW:
  370.     INC    BL
  371.     CMP    BL,3
  372.     JNC    INPUT_KEY
  373.     MOV    [PALTNUM],BX
  374.     ;
  375.     ADD    BL,'0'
  376.     MOV    [PAL_$],BL
  377.     ;
  378.     MOV    ESI,OFFSET ATTR_$
  379.     CALL    PRINT_MSG
  380.     ;
  381.     JMP    MAIN_LOOP2
  382.  
  383. RIGHT_ARROW:
  384.     ADD    CX,20
  385. LEFT_ARROW:
  386.     SUB    CX,10
  387. CHK_NUM:
  388.     JZ    INPUT_KEY
  389.     CMP    CX,[HEADMAX]
  390.     JA    INPUT_KEY
  391.     MOV    [HEADNUM],CX
  392.     JMP    MAIN_LOOP
  393.  
  394. NUMBER_KEY:
  395.     SUB    DL,'0'
  396.     MOVZX    CX,DL
  397.     MOV    AX,[INPUT]
  398.     XOR    EDX,EDX
  399.     MOV    BX,1000
  400.     DIV    BX
  401.     IMUL    DX,10
  402.     ADD    CX,DX
  403.     MOV    [INPUT],CX
  404.     JMP    CHK_NUM
  405.  
  406. ESCAPE_KEY:
  407. ;セイジョウ シュウリョウ
  408.     MOV    AH,3EH
  409.     MOV    BX,[HANDLE]
  410.     INT    21H
  411.     ;
  412.     MOV    AX,100H
  413.     MOV    CX,120
  414.     CALL    SPRITE_CALL
  415.     ;
  416.     CALL    OFFSET_0
  417.     ;
  418.     MOV    EDX,1
  419.     CALL    DISP_PAGE
  420.     ;
  421.     MOV    AX,[EXIST_R]
  422.     TEST    AX,AX
  423.     JNZ    SHORT RETRY2
  424.     ;
  425.     CALL    CLEAR_SCREEN
  426.     MOV    ESI,OFFSET EXIT_$
  427.     CALL    PRINT_MSG
  428.     ;
  429.     MOV    AX,900H
  430.     INT    90H
  431.     ;
  432.     JMP    SHORT EXIT_PRG
  433.     ;
  434. ERROR_TRAP2:
  435.     CALL    CLEAR_SCREEN
  436.     MOV    ESI,OFFSET ERROR2$
  437.     CALL    PRINT_MSG
  438.     ;
  439.     MOV    AX,900H
  440.     INT    90H
  441.     ;
  442. ;DRIVE_R.IMG ヲ ヨミコム
  443. RETRY2:
  444.     CALL    CLEAR_SCREEN
  445.     MOV    ESI,OFFSET TMENU_$
  446.     CALL    PRINT_MSG
  447.     ;
  448.     MOV    AX,3D00H
  449.     MOV    EDX,OFFSET DRIVE_R
  450.     INT    21H
  451.     JC    ERROR_TRAP2
  452.     ;
  453.     MOV    BX,AX
  454.     MOV    AX,130H
  455.     MOV    DS,AX
  456.     MOV    AH,3FH
  457.     MOV    ECX,IMG_LEN
  458.     XOR    EDX,EDX
  459.     INT    21H
  460.     MOV    AX,14H
  461.     MOV    DS,AX
  462.     JC    ERROR_TRAP2
  463.     ;
  464.     MOV    AH,3EH
  465.     INT    21H
  466.     JC    ERROR_TRAP2
  467. EXIT_PRG:
  468. ;CD ドライブ テイシ ジカン ノ セッテイ
  469.     MOV    DL,20
  470.     CALL    CD_TIME
  471.     ;
  472.     MOV    AX,4C00H
  473.     INT    21H
  474.  
  475. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  476.  
  477. CD_TIME:
  478.     MOV    AX,52C0H
  479.     MOV    CH,0FFH
  480.     MOV    CL,DL
  481.     INT    93H
  482.     TEST    AH,AH
  483.     JNZ    CD_TIME
  484.     RET
  485.  
  486. READ_CD:
  487.     MOV    AX,4200H
  488.     MOV    BX,[HANDLE]
  489.     MOVZX    ECX,[HPAGE]
  490.     IMUL    ECX,HEADLEN
  491.     MOV    DX,CX
  492.     SHR    ECX,16
  493.     INT    21H
  494.     ;
  495.     MOV    AH,3FH
  496.     MOV    BX,[HANDLE]
  497.     MOV    ECX,HEADLEN
  498.     MOV    EDX,OFFSET HEADWRK
  499.     INT    21H
  500.     RET
  501.  
  502. ;ヒョウジカイシイチ ノ セッテイ
  503. OFFSET_0:
  504.     XOR    EAX,EAX
  505.     MOV    [OFFSETX],AX
  506.     MOV    [OFFSETY],AX
  507. ZOOM_0:
  508.     MOV    [ZOOM],0
  509. DISP_START:
  510.     MOV    CX,[ZOOM]
  511.     ADD    CX,2
  512.     ;
  513.     CALL    WRITE_PAGE_1
  514.     ;
  515.     XOR    EDX,EDX
  516.     CALL    DISP_PAGE
  517.     ;
  518.     MOV    AX,202H
  519.     MOV    DX,CX
  520.     MOV    BX,CX
  521.     CALL    EGB_CALL
  522.     ;
  523.     MOV    AX,200H
  524.     XOR    EDX,EDX
  525.     XOR    EBX,EBX
  526.     CMP    AH,CL
  527.     JZ    SHORT ZOOM_ZERO
  528.     ;
  529.     CALL    EGB_CALL
  530.     ;
  531.     MOV    AX,203H
  532.     MOV    DX,256
  533.     MOV    BX,240
  534.     JMP    SHORT ZOOM_ELSE
  535.     ;
  536. ZOOM_ZERO:
  537.     MOV    AL,3
  538.     MOV    DX,256
  539.     MOV    BX,240
  540.     CALL    EGB_CALL
  541.     ;
  542.     MOV    AX,200H
  543.     MOV    DX,64
  544.     XOR    EBX,EBX
  545. ZOOM_ELSE:
  546.     CALL    EGB_CALL
  547.     ;
  548.     CALL    WRITE_PAGE_0
  549.     ;
  550.     MOV    AX,202H
  551.     MOV    DX,CX
  552.     MOV    BX,CX
  553.     CALL    EGB_CALL
  554.     ;
  555.     MOV    AX,203H
  556.     MOV    DX,320
  557.     MOV    BX,256
  558.     CALL    EGB_CALL
  559.     ;
  560. OFFSET_CHG:
  561.     CALL    WRITE_PAGE_1
  562.     ;
  563.     MOV    AH,7
  564.     XOR    ESI,ESI
  565.     XOR    EDI,EDI
  566.     XOR    EDX,EDX
  567.     CMP    DX,[ZOOM]
  568.     JNZ    SHORT OFFSET_ON
  569.     ;
  570.     CALL    SPRITE_CALL
  571.     ;
  572.     MOV    AX,201H
  573.     XOR    EBX,EBX
  574.     CALL    EGB_CALL
  575.     ;
  576.     JMP    SHORT OFFSET_NO
  577.     ;
  578. OFFSET_ON:
  579.     SUB    SI,[OFFSETX]
  580.     CALL    SPRITE_CALL
  581.     ;
  582.     MOV    AX,201H
  583.     MOV    BX,[OFFSETY]
  584.     CALL    EGB_CALL
  585.     ;
  586.     MOV    DX,[OFFSETX]
  587.     ADD    DX,64
  588. OFFSET_NO:
  589.     CALL    WRITE_PAGE_0
  590.     ;
  591.     MOV    AX,201H
  592.     CALL    EGB_CALL
  593.     ;
  594.     MOV    EDX,3
  595. ;ヒョウジ ページ ノ シテイ
  596. DISP_PAGE:
  597.     MOV    AX,601H
  598.     JMP    SHORT EGB_CALL
  599.  
  600. ;カキコミ ページ 0
  601. WRITE_PAGE_0:
  602.     MOV    AX,500H
  603.     JMP    SHORT EGB_CALL
  604.  
  605. ;カキコミ ページ 1
  606. WRITE_PAGE_1:
  607.     MOV    AX,501H
  608.     JMP    SHORT EGB_CALL
  609.  
  610. ;ゼンガメン ノ ショウキョ
  611. CLEAR_SCREEN:
  612.     MOV    AH,20H
  613. EGB_CALL:
  614.     MOV    EDI,OFFSET EGBWORK
  615.     CALL    PWORD PTR FS:[20H]
  616.     RET
  617.  
  618. ;スプライト ショキカ
  619. INIT_SPRITE:
  620.     MOV    AH,0
  621. SPRITE_CALL:
  622.     CALL    PWORD PTR FS:[60H]
  623.     RET
  624.  
  625. SOUND_CALL:
  626.     CALL    PWORD PTR FS:[80H]
  627.     RET
  628.  
  629. FONT_CALL:
  630.     CALL    PWORD PTR FS:[0A0H]
  631.     RET
  632.  
  633. ;モジレツ ヒョウジ
  634. PRINT_MSG:
  635.     CALL    SJISSTRING
  636.     MOVZX    EAX,WORD PTR [ESI+4]
  637.     LEA    ESI,[ESI+EAX+6]
  638.     MOV    AX,[ESI]
  639.     INC    AX
  640.     JNZ    SHORT PRINT_MSG
  641.     RET
  642.  
  643. ;10シンスウ 4ケタ コンバート
  644. CONVERT_D:
  645.     MOV    CL,4
  646.     MOV    ESI,OFFSET DECIMAL
  647. CON_LOOP:
  648.     XOR    EDX,EDX
  649.     DIV    WORD PTR [ESI]
  650.     OR    AL,'0'
  651.     STOSB
  652.     MOV    AX,DX
  653.     ADD    ESI,2
  654.     DEC    CL
  655.     JNZ    SHORT CON_LOOP
  656.     RET
  657.  
  658. ;EGB_sjisString コウソク バン
  659. SJISSTRING:
  660.     PUSHAD
  661.     XOR    EAX,EAX
  662.     LODSW
  663.     MOV    EDI,EAX
  664.     LODSW
  665.     SUB    AL,15
  666.     SHL    EAX,10
  667.     LEA    EDI,[EAX+EDI*2]
  668.     LODSW
  669.     MOV    CX,AX
  670.     DEC    CX
  671.     JS    SJISSTRING9
  672.     MOV    AX,1CH
  673.     MOV    ES,AX
  674. SJISSTRING1:
  675.     LODSB
  676.     DEC    CX
  677.     TEST    AL,AL
  678.     JS    SHORT SJISSTRING2
  679.     PUSH    ESI
  680.     MOV    BL,AL
  681.     XOR    EAX,EAX
  682.     MOV    DX,810H
  683.     CALL    FONT_CALL
  684.     JMP    SHORT SJISSTRING3
  685. SJISSTRING2:
  686.     MOV    BH,AL
  687.     LODSB
  688.     DEC    CX
  689.     PUSH    ESI
  690.     MOV    BL,AL
  691.     MOV    AH,2
  692.     CALL    FONT_CALL
  693.     MOV    AX,100H
  694.     MOV    DX,1010H
  695.     CALL    FONT_CALL
  696. SJISSTRING3:
  697.     MOV    BP,DX
  698.     MOV    EBX,EDI
  699. SJISSTRING4:
  700.     LODSB
  701.     NOT    AL
  702.     MOV    DL,AL
  703.     REPT    8
  704.     ADD    DL,DL
  705.     SBB    EAX,EAX
  706.     STOSW
  707.     ENDM
  708.     SUB    DH,8
  709.     JNZ    SJISSTRING4
  710.     LEA    EDI,[EBX+400H]
  711.     MOV    DX,BP
  712.     DEC    DL
  713.     JNZ    SJISSTRING3
  714.     MOVZX    EAX,DH
  715.     LEA    EDI,[EDI+EAX*2-4000H]
  716.     POP    ESI
  717.     MOV    AX,14H
  718.     MOV    DS,AX
  719.     TEST    CX,CX
  720.     JNS    SJISSTRING1
  721.     MOV    ES,AX
  722. SJISSTRING9:
  723.     POPAD
  724.     RET
  725.  
  726. CSEG    ENDS
  727. ;********************************************************************
  728. DSEG    SEGMENT    DWORD PUBLIC USE32 'DATA'
  729.  
  730. PALTFIL    DB    DRIVE,':\DATA\PALETTE.32K',0
  731. HEADFIL    DB    DRIVE,':\DATA\HEAD.DAT',0
  732. DRIVE_R    DB    'Q:\DRIVE_R.IMG',0
  733. RUN386    DB    'R:\RUN386.EXE',0
  734.  
  735. WAIT_$    DW    16,100,36
  736.     DB    '★☆★  ヘッド表示   Ver1.23  ★☆★'
  737.     DW    16,120,36
  738.     DB    'Programmed by Yasu.Hara.'
  739.     DW    16,140,36
  740.     DB    'CDからデータを読み込んでいま~っす'
  741.     DW    16,160,36
  742.     DB    '♪~~しばらくお待ちくださいね~~♪'
  743.     DW    -1
  744.  
  745. ERROR_$    DW    16,140,36
  746.     DB    '富士通HabitatのCD-ROMを'
  747.     DW    16,160,36
  748.     DB    '入れてから、何かキーを押してください'
  749.     DW    -1
  750.  
  751. TMENU_$    DW    16,120,36
  752.     DB    '《Towns-MENU》に戻りま~す'
  753.     DW    16,140,36
  754.     DB    '♪~~ちょっとお待ちくださいね~~♪'
  755.     DW    -1
  756.  
  757. ERROR2$    DW    16,100,36
  758.     DB    'スプライトメモリ(DRIVE R)に'
  759.     DW    16,120,36
  760.     DB    'RUN386.EXE を再ロードします'
  761.     DW    16,140,36
  762.     DB    '<Towns-OS V1.1 L20> のCD-ROMを'
  763.     DW    16,160,36
  764.     DB    '入れてから、何かキーを押してください'
  765.     DW    -1
  766.  
  767. EXIT_$    DW    16,110,36
  768.     DB    '『ヘッド表示プログラム』を終了します'
  769.     DW    16,130,36
  770.     DB    '必要ならば、CD-ROMを入れ替えて'
  771.     DW    16,150,36
  772.     DB    '準備できたら何かキーを押してください'
  773.     DW    -1
  774.  
  775. LINE$    DW    32,40,32
  776.     DB    'ヘッドの種類:'
  777. MAX_$    DB    '     パレット番号:1'
  778.     DW    -1
  779.  
  780. ATTR_$    DW    32+8*31,40,1
  781. PAL_$    DB    ' '
  782.     DW    -1
  783.  
  784. NUMBER$    DW    32,68,4
  785.     DB    '    '
  786.     DW    32,68+36,4
  787.     DB    '    '
  788.     DW    32,68+36*2,4
  789.     DB    '    '
  790.     DW    32,68+36*3,4
  791.     DB    '    '
  792.     DW    32,68+36*4,4
  793.     DB    '    '
  794.     DW    32+136,68,4
  795.     DB    '    '
  796.     DW    32+136,68+36,4
  797.     DB    '    '
  798.     DW    32+136,68+36*2,4
  799.     DB    '    '
  800.     DW    32+136,68+36*3,4
  801.     DB    '    '
  802.     DW    32+136,68+36*4,4
  803.     DB    '    '
  804.     DW    -1
  805.  
  806.     EVEN
  807.  
  808. DECIMAL    DW    1000,100,10,1
  809.  
  810. CLR_PAT    DB    512 DUP(0)
  811.  
  812. OFFSETX    DW    0
  813. OFFSETY    DW    0
  814. ZOOM    DW    0
  815. PADWORK    DW    0
  816. PALTNUM    DW    1
  817. INPUT    DW    0
  818. HPAGE    DW    0
  819. HEADNUM    DW    1
  820. HEADOFF    DW    0
  821. HEADMAX    DW    0
  822. HANDLE    DW    0
  823. EXIST_R    DW    0
  824.  
  825. EGBWORK    DB    EGBSIZE DUP(?)
  826. PALTWRK    DB    PALTLEN DUP(?)
  827. HEADWRK    DB    HEADLEN DUP(?)
  828.  
  829. DSEG    ENDS
  830. ;********************************************************************
  831. SSEG    SEGMENT    DWORD STACK USE32 'STACK'
  832.  
  833.     DB    1000H DUP(?)
  834.  
  835. SSEG    ENDS
  836. ;********************************************************************
  837.     END
  838.